../../My Documents/N64 Roms - Super Mario 64/Super Mario 64 (English).swab.v64
80278504: 27 bd ff d0  ADDIU sp, sp, 0xffffffd0 (-48)
80278508: af bf 00 24  SW ra, sp, 0x24 (36)
8027850c: af a4 00 30  SW a0, sp, 0x30 (48)
80278510: af a5 00 34  SW a1, sp, 0x34 (52)
80278514: af a6 00 38  SW a2, sp, 0x38 (56)

80278518: 8f ae 00 38  LW t6, sp, 0x38 (56)               
8027851c: 8f af 00 34  LW t7, sp, 0x34 (52)
80278520: 24 01 ff f0  ADDIU at, r0, 0xfffffff0 (-16)
80278524: 01 cf c0 23  SUBU t8, t6, t7
80278528: 27 19 00 0f  ADDIU t9, t8, 0xf (15)
8027852c: 03 21 40 24  AND t0, t9, at
80278530: af a8 00 2c  SW t0, sp, 0x2c (44)                 [sp + 0x2c] =  ([sp + 0x38] - [sp + 0x34] + 0xf) & 0xfffffff0

80278534: 8f a4 00 30  LW a0, sp, 0x30 (48)
80278538: 0c 0c 90 ec  JAL 0x803243b0                       0x803243b0([sp + 30], [sp + 2c]);
8027853c: 8f a5 00 2c  LW a1, sp, 0x2c (44)

80278540: 8f a9 00 2c  LW t1, sp, 0x2c (44)
80278544: 11 20 00 2c  BEQ r0, t1, 0x802785f8 (pc + 0xb0)   if(![sp + 0x2c]) { return; }
80278548: 00 00 00 00  NOP

8027854c: 8f aa 00 2c  LW t2, sp, 0x2c (44)
80278550: 2d 41 10 00  SLTIU at, t2, 0x1000 (4096)          at = ([sp + 0x2c] < 0x1000)
80278554: 14 20 00 04  BNE at, r0, 0x80278568 (pc + 0x10)   if ([sp + 0x2c] >= 0x1000) goto 0x80278568;
80278558: 00 00 00 00  NOP

8027855c: 24 0b 10 00  ADDIU t3, r0, 0x1000 (4096)
80278560: 10 00 00 03  BEQ r0, r0, 0x80278570 (pc + 0xc)    [sp + 28] = 0x1000
80278564: af ab 00 28  SW t3, sp, 0x28 (40)                 goto 0x80278570

80278568: 8f ac 00 2c  LW t4, sp, 0x2c (44)
8027856c: af ac 00 28  SW t4, sp, 0x28 (40)                 [sp + 28] = [sp + 2c]

80278570: 8f ad 00 30  LW t5, sp, 0x30 (48)
80278574: 8f ae 00 28  LW t6, sp, 0x28 (40)
80278578: 3c 0f 80 34  LUI t7, 0x8034 (32820)
8027857c: 25 ef af 60  ADDIU t7, t7, 0xffffaf60 (-20640)    t7 = 0x8033af60
80278580: 3c 04 80 34  LUI a0, 0x8034 (32820)
80278584: 24 84 af 48  ADDIU a0, a0, 0xffffaf48 (-20664)    a0 = 0x8033af48
80278588: af af 00 18  SW t7, sp, 0x18 (24)                 [sp + 0x18] = 0x8033af60
8027858c: 00 00 28 25  OR a1, r0, r0
80278590: 00 00 30 25  OR a2, r0, r0
80278594: 8f a7 00 34  LW a3, sp, 0x34 (52)
80278598: af ad 00 10  SW t5, sp, 0x10 (16)
8027859c: 0c 0c 91 18  JAL 0x80324460                       0x80324460(0x8033af48, 0, 0, [sp + 0x34], [sp + 0x30], [sp + 0x28], 0x8033af60)
802785a0: af ae 00 14  SW t6, sp, 0x14 (20)

802785a4: 3c 04 80 34  LUI a0, 0x8034 (32820)
802785a8: 3c 05 80 34  LUI a1, 0x8034 (32820)
802785ac: 24 a5 af 5c  ADDIU a1, a1, 0xffffaf5c
802785b0: 24 84 af 60  ADDIU a0, a0, 0xffffaf60
802785b4: 0c 0c 8a 00  JAL 0x80322800                       0x80322800(0x8033af60, 0x8033af5c, 1)
802785b8: 24 06 00 01  ADDIU a2, r0, 0x1 (1)

802785bc: 8f b8 00 30  LW t8, sp, 0x30 (48)
802785c0: 8f b9 00 28  LW t9, sp, 0x28 (40)
802785c4: 03 19 40 21  ADDU t0, t8, t9
802785c8: af a8 00 30  SW t0, sp, 0x30 (48)                 [sp + 0x30] += [sp + 0x28]

802785cc: 8f a9 00 34  LW t1, sp, 0x34 (52)
802785d0: 8f aa 00 28  LW t2, sp, 0x28 (40)
802785d4: 01 2a 58 21  ADDU t3, t1, t2
802785d8: af ab 00 34  SW t3, sp, 0x34 (52)                 [sp + 0x34] += [sp + 0x28]

802785dc: 8f ac 00 2c  LW t4, sp, 0x2c (44)
802785e0: 8f ad 00 28  LW t5, sp, 0x28 (40)
802785e4: 01 8d 70 23  SUBU t6, t4, t5
802785e8: af ae 00 2c  SW t6, sp, 0x2c (44)                 [sp + 0x2c] -= [sp + 0x28]

802785ec: 8f af 00 2c  LW t7, sp, 0x2c (44)
802785f0: 15 e0 ff d6  BNE t7, r0, 0x8027854c (pc - 0xa8)   if ([sp + 0x2c]) goto 0x8027854c
802785f4: 00 00 00 00  NOP

802785f8: 10 00 00 01  BEQ r0, r0, 0x80278600 (pc + 0x4)
802785fc: 00 00 00 00  NOP
80278600: 8f bf 00 24  LW ra, sp, 0x24 (36)
80278604: 27 bd 00 30  ADDIU sp, sp, 0x30 (48)
80278608: 03 e0 00 08  JR ra
8027860c: 00 00 00 00  NOP

[sp + 0x24]  return addr
[sp + 0x28]  v1
[sp + 0x2c]  v2
[sp + 0x30]  arg1
[sp + 0x34]  arg2
[sp + 0x38]  arg3


/* 0x80278504 */
void 0x80278504(arg1, arg2, arg3)
{
    v2 =  (arg3 - arg2 + 0xf) & 0xfffffff0
    0x803243b0(arg1, v2);

    while (v2) {
        if (v2 < 0x1000) {
            v1 = 0x1000;
        } else {
            v1 = v2;
        }

        0x80324460(0x8033af48, 0, 0, arg2, arg1, v1, 0x8033af60)

        0x80322800(0x8033af60, 0x8033af5c, 1)

        arg1 += v1
        arg2 += v1
        v2 -= v1
    }
}




/* 0x80278504 */
void 0x80278504(void *dst, uint32 start, uint32 end)
{

    uint32 v1;
    uint32 v2;

    v2 =  (end - start + 0xf) & 0xfffffff0
    0x803243b0(dst, v2);

    while (v2) {
        if (v2 < 0x1000) {
            v1 = 0x1000;
        } else {
            v1 = v2;
        }

        osPiStartDma(0x8033af48, 0, 0, start, dst, v1, 0x8033af60)

        osRecvMesg(0x8033af60, 0x8033af5c, 1)

        dst += v1
        start += v1
        v2 -= v1
    }
}



